package com.myblog.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
 * 工具类
 *  对象转JSON
 *    核心类 ObjectMapper
 */
public class JSONParseUtils {

    public static void main(String[] str){

    }

    public static final ObjectMapper mapper = new ObjectMapper();
    private static final Logger logger = LoggerFactory.getLogger(JSONParseUtils.class);

    /**
     * json序列化： 对象转换为json格式的字符串
     * @param obj 需转换对象
     * @return 转换后的json串
     */
    public static String objectToJson(Object obj){
        try {
            return mapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            logger.error("json序列化出错：" + obj, e);
            e.printStackTrace();
        }
        return null;
    }

    /**
     * json反序列化： json转换 为 对象
     * @param json json串
     * @param tCl 类型
     * @param <T>
     * @return
     */
    public static <T> T jsonToObject(String json,Class<T> tCl){
        try {
            return mapper.readValue(json, tCl);
        } catch (JsonProcessingException e) {
            logger.error("json序列化出错：" +  e);
            e.printStackTrace();
        } catch (IOException e){
            logger.error("json序列化出错,IOException：" +  e);
            e.printStackTrace();
        }
        return null;
    }

    /**
     *  json的反序列化通用 list or map
     * @param json
     * @param type
     * @param <T>
     * @return
     */
    public static <T> T jsonToObjec(String json, TypeReference<T> type){
        try{
            return mapper.readValue(json, type);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

}
